package main

import "fmt"

// method 1
func main() {
	var arr [5][5]int
	count := 0
	for i := 0; i < 5; i++ {
		count++
		arr[0][i] = count
	} //处理第一行
	for i := 1; i < 5; i++ {
		count++
		arr[i][4] = count
	}//处理第五列
	for i := 3; i > -1; i-- {
		count++
		arr[4][i] = count
	}//处理第五行
	for i := 3; i > 0; i-- {
		count++
		arr[i][0] = count
	}//处理第一列
	for i := 1; i < 4; i++ {
		count++
		arr[1][i] = count
	}//处理第二行
	for i := 2; i < 4; i++ {
		count++
		arr[i][3] = count
	}//处理第四列
	for i := 2; i > 0; i-- {
		count++
		arr[3][i] = count
	}//处理第四行
	for i := 1; i < 3; i++ {
		count++
		arr[2][i] = count
	}//处理第三行
	fmt.Println(arr)
}

// method 2
func main() {
	var arr [5][5]int
	count := 1
	line_i, row_i, line_j, row_j := 4, 4, 0, 1//定义行和列的下标范围
	for {
		if line_i < line_j {
			break
		}
		for n := line_j; n <= line_i; n++ {
			arr[line_j][n] = count
			count++
		}//对于在数组中心上边的行的处理
		line_i--//行最大下标减小
		for n := row_j; n <= row_i; n++ {
			arr[n][row_i] = count
			count++
		}//对于在数组中心右边的列的处理
		row_i--//列的最大下标减小
		for n := line_i; n >= line_j; n-- {
			arr[line_i+1][n] = count
			count++
		}//对于在数组中心下边的行的处理
		line_j++//行的最小下标增加
		for n := row_i; n >= row_j; n-- {
			arr[n][row_j-1] = count
			count++
		}//对于在数组中心左边的列的处理
		row_j++//列的最小下标增加
	}
	fmt.Println(arr)
}
